#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;
int n, k;
long long a[N];
int que[N]; // que 存储的是下标

int main()
{
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    // 找到窗口最小值
    int hh = 0, tt = -1;
    for (int i = 0; i < n; i++)
    {
        if (hh <= tt && que[hh] < i - k + 1) hh++;  // 判断队首是否应该出队了
        while (hh <= tt && a[que[tt]] >= a[i]) tt--;    // 如果比当前值大就出队,这里是否取等号，能够决定队列中相等的长度
        que[++tt] = i;
        if (i >= k - 1){
            cout << a[que[hh]] << " ";
        } 
    }
    cout << '\n';

    hh = 0, tt = -1;
    for (int i = 0; i < n; i++)
    {
        if (hh <= tt && que[hh] < i - k + 1) hh++;  // 判断队首是否应该出队了
        while (hh <= tt && a[que[tt]] <= a[i]) tt--;
        que[++tt] = i;
        if (i >= k - 1){
            cout << a[que[hh]] << " ";
        } 
    }

    return 0;
}